Binder 面试题汇总

9/9/2023

# 问原理

  • 什么是 Android Binder?
  • Android Binder 是如何实现进程间通信的?
  • Android 为什么采用 Binder 作为主要的的 IPC 机制?
  • Binder 是如何实现仅通过一次拷贝将数据从 A 进程传递给 B 进程的?
  • Binder 的优势是什么?

这些都是问 Binder 的基本原理,回答都大同小异。对于应用层开发,99% 止步于此,再问就不礼貌了。

如果是应聘 Framework 岗位,可能还需要熟悉下面的问题。

# 问流程

  • 说一下进程从ServiceManager获取服务的流程
  • Binder 是如何找到目标服务并唤醒目标进程/线程的
  • Android Binder 中的 Proxy 和 Stub 是什么
  • 应用该如何获取和添加 Binder 服务?
  • AIDL 是什么?如何使用的?
  • Android Binder 中有哪些组件?工作的流程是什么?

无论怎么问,只要把之前讲的 Native 和 Java 层示例程序的源码分析掌握,就可以以不变应万变了。

# 问细节

  • 了解 mmap 的原理吗?
  • 使用 Binder 传输数据的最大限制是多少,被占满后会导致什么问题?
  • Intent 传递大数据限制?
  • binder_proc 结构体中有两个 binder_ref 红黑树,它们的作用是什么?
  • Android APP 进程天生支持Binder通信的原理是什么?
  • AIDL 中的 in out inout oneway 这些关键字的作用是什么?
  • Intent 传递大数据限制?
  • Binder 服务在调用期间抛出了 RuntimeException 异常,服务端会 Crash 么?
  • 客户端调用 Binder 接口后抛出的 DeadObjectException 是什么意思?
  • Binder 驱动加载过程中有哪些重要的步骤?
  • Binder 的死亡通知机制的作用是什么,它是如何实现的?
  • bindService 所绑定的"服务概念和 Binder 中的服务 Server 有什么区别?
  • writeStrongBinder与readStrongBinder的作用和原理?
  • 每个进程最多存在多少个 Binder 线程,这些线程都被占满后会导致什么问题?
  • Binder 驱动什么时候释放缓冲区的内存?
  • 为什么使用广播传输 2MB的Bitmap会抛异常,而使用AIDL生成的 Binder 接口传输 Bitmap 就不会抛异常呢?
  • 应用进程为什么支持 Binder 通信,直接可以使用四大组件呢?
  • 四大组件中常见的 2 个 Binder 服务是?
  • Binder 都有什么主要的协议?
  • Binder 协议中BC_与BR_开头的协议都有什么区别?
  • A 是 C 端,B 是 S 端,问 如何保证 A 知道 B 是否存活,,B 如何知道 A 存活, 如果 A 死了,B 该怎么办?B 死了 A 该怎么办?

细节就比较见功底了,需要我们从应用到内核层,对 Binder 有非常全面的了解。

# 问实践

  • 工作中有处理过 Binder 相关的问题吗?

Binder 经过了很多年的迭代,Binder 本身已经很少会出问题了,更多的会从使用的角度去回答。